package com.yupi.aicodehelper.controller;

import com.yupi.aicodehelper.ai.AiCodeHelperService;
import jakarta.annotation.Resource;
import org.springframework.http.codec.ServerSentEvent;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

@RestController
@RequestMapping("/ai")
public class AiController {

    @Resource
    private AiCodeHelperService aiCodeHelperService;

    /**
     * AI聊天接口 - 支持流式响应
     * @param memoryId 用户记忆ID，用于标识不同的对话会话
     * @param message 用户发送的消息内容
     * @return 返回流式的服务器发送事件，包含AI的回复内容
     */
    @GetMapping("/chat")
    public Flux<ServerSentEvent<String>> chat(int memoryId, String message) {
        // 打印调试信息
        System.out.println("用户发起了提问");
        System.out.println("用户id"+memoryId);
        System.out.println("用户提出内容"+message);
        
        // 调用AI服务进行流式聊天，并转换为服务器发送事件格式
        return aiCodeHelperService.chatStream(memoryId, message)  // 获取AI的流式响应
                .map(chunk ->  // chunk: AI返回的每个数据块（流式响应的一部分）
                        ServerSentEvent.<String>builder()  // 创建服务器发送事件对象
                        .data(chunk)  // 设置事件数据为AI返回的内容块
                        .build());  // 构建最终的服务器发送事件
    }
}
